From: Florian Müllner Date: Fri, 8 Mar 2019 13:06:38 +0000 (+0100) Subject: texture-cache: Load bound surfaces into StWidgets X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~879^2^2~7 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=6f794738e82a33f356f5069c36cbffff846c7acf;p=gnome-shell.git texture-cache: Load bound surfaces into StWidgets Using widgets instead of plain actors will allow us to set the size from CSS. https://gitlab.gnome.org/GNOME/gnome-shell/issues/1027 --- diff --git a/src/shell-app.c b/src/shell-app.c index 3f91613fa..e0b925b5f 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -184,7 +184,7 @@ window_backed_app_get_icon (ShellApp *app, int size) { MetaWindow *window = NULL; - ClutterActor *actor; + StWidget *widget; gint scale; ShellGlobal *global; StThemeContext *context; @@ -204,16 +204,18 @@ window_backed_app_get_icon (ShellApp *app, if (window == NULL) { + ClutterActor *actor; + actor = clutter_actor_new (); g_object_set (actor, "opacity", 0, "width", (float) size, "height", (float) size, NULL); return actor; } - actor = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (), - G_OBJECT (window), - "icon", - size); - return actor; + widget = st_texture_cache_bind_cairo_surface_property (st_texture_cache_get_default (), + G_OBJECT (window), + "icon", + size); + return CLUTTER_ACTOR (widget); } /** diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c index a9688ec60..fa5b1f04a 100644 --- a/src/st/st-texture-cache.c +++ b/src/st/st-texture-cache.c @@ -767,27 +767,30 @@ st_texture_cache_free_bind (gpointer data) * If the source object is destroyed, the texture will continue to show the last * value of the property. * - * Return value: (transfer none): A new #ClutterActor + * Return value: (transfer none): A new #StWidget */ -ClutterActor * +StWidget * st_texture_cache_bind_cairo_surface_property (StTextureCache *cache, GObject *object, const char *property_name, gint size) { - ClutterActor *actor; + StWidget *widget; gchar *notify_key; StTextureCachePropertyBind *bind; - actor = create_invisible_actor (); - clutter_actor_set_size (actor, size, size); + widget = g_object_new (ST_TYPE_WIDGET, + "opacity", 0, + "width", (float)size, + "height", (float)size, + NULL); bind = g_slice_new0 (StTextureCachePropertyBind); bind->cache = cache; - bind->actor = actor; + bind->actor = CLUTTER_ACTOR (widget); bind->size = size; bind->source = object; - g_object_weak_ref (G_OBJECT (actor), st_texture_cache_bind_weak_notify, bind); + g_object_weak_ref (G_OBJECT (widget), st_texture_cache_bind_weak_notify, bind); bind->weakref_active = TRUE; st_texture_cache_reset_texture (bind, property_name); @@ -797,7 +800,7 @@ st_texture_cache_bind_cairo_surface_property (StTextureCache *cache, bind, (GClosureNotify)st_texture_cache_free_bind, 0); g_free (notify_key); - return actor; + return widget; } /** diff --git a/src/st/st-texture-cache.h b/src/st/st-texture-cache.h index a3311a862..11d1c4e64 100644 --- a/src/st/st-texture-cache.h +++ b/src/st/st-texture-cache.h @@ -32,6 +32,7 @@ #include #include +#include #define ST_TYPE_TEXTURE_CACHE (st_texture_cache_get_type ()) G_DECLARE_FINAL_TYPE (StTextureCache, st_texture_cache, @@ -63,10 +64,10 @@ st_texture_cache_load_sliced_image (StTextureCache *cache, GFunc load_callback, gpointer user_data); -ClutterActor *st_texture_cache_bind_cairo_surface_property (StTextureCache *cache, - GObject *object, - const char *property_name, - gint size); +StWidget *st_texture_cache_bind_cairo_surface_property (StTextureCache *cache, + GObject *object, + const char *property_name, + gint size); ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache, StThemeNode *theme_node,